package ObjectOriented;

/**
 * 枚举类
      1. 枚举类是一种特殊的类，用于表示固定数量的常量。
      2. 枚举类的定义格式为：enum ClassName {value1, value2, ...};
      3. 枚举类中的每个值都是一个常量，不能被修改。
      4. 枚举类中的每个值都有自动的序号，从0开始。
      5. 枚举类可以用switch语句进行遍历。
      6、枚举类是一种引用数据类型。前面提到的引用类型的比较必须使用equals()方法，不能使用==。但是枚举类是特例，可以使用==进行比较。因为enum类型的每个常量在JVM中只有一个唯一实例，所以可以直接用==比较两个变量是否是同一个枚举常量。
      7、定义的enum类型总是继承自java.lang.Enum，且无法被继承；
      8、只能定义出enum的实例，而无法通过new操作符创建enum的实例；
      9、定义的每个实例都是引用类型的唯一实例；

  枚举类的常用方法
    name()：返回枚举值的名称。注意不要使用toString()！
    ordinal()：返回枚举值的序号。
 */
enum Weekday {
  SUN, MON, TUE, WED, THU, FRI, SAT // 枚举值
}

public class LearnEnum {
  public static void main(String[] args) {
    Weekday day = Weekday.SUN;
    System.out.println(day == Weekday.SAT); 
    System.out.println(day.ordinal()); // 0
    System.out.println(day.name()); // SUN
    switch (day) {
      case SUN:
        System.out.println("Sunday");
        break;
      case MON:
        System.out.println("Monday");
        break;
      case TUE:
        System.out.println("Tuesday");
        break;
      case WED:
        System.out.println("Wednesday");
        break;
      case THU:
        System.out.println("Thursday");
        break;
      case FRI:
        System.out.println("Friday");
        break;
      case SAT:
        System.out.println("Saturday");
        break;
    }
  }
}


enum Color {
  RED, GREEN, BLUE;
}

/**
  相当于以下代码
  public final class Color extends Enum { // 继承自Enum，标记为final class
    // 每个实例均为全局唯一:
    public static final Color RED = new Color();
    public static final Color GREEN = new Color();
    public static final Color BLUE = new Color();
    // private构造方法，确保外部无法调用new操作符:
    private Color() {}
  }
 */